package com.fast.mybatis.util;

/**
 * ClassName: StringUtil
 * Function:  TODO
 * Date:      2018-09-08 16:01
 * author     likaixuan
 * version    V1.0
 */
public class StringUtil {

    /**
     * 首字母转小写
     *
     * @param s
     * @return
     */
    public static String toLowerCaseFirstOne(String s) {
        if (Character.isLowerCase(s.charAt(0))) {
            return s;
        } else {
            return (new StringBuilder())
                    .append(Character.toLowerCase(s.charAt(0)))
                    .append(s.substring(1)).toString();
        }
    }

    /**
     * 首字母转大写
     *
     * @param s
     * @return
     */
    public static String toUpperCaseFirstOne(String s) {
        //处理下划线
        s = processColnames(s);
        if (Character.isUpperCase(s.charAt(0))) {
            return s;
        } else {
            return (new StringBuilder())
                    .append(Character.toUpperCase(s.charAt(0)))
                    .append(s.substring(1)).toString();
        }
    }

    /**
     * replace:(替换字符串函数)
     *
     * @param strSource 源字符串
     * @param strFrom   要替换的子串
     * @param strTo     替换为的字符串
     * @return
     * @since JDK 1.7
     */
    public static String replace(String strSource, String strFrom,
                                 String strTo) {
        // 如果要替换的子串为空，则直接返回源串
        if (strFrom == null || strFrom.equals(""))
            return strSource;
        String strDest = "";
        // 要替换的子串长度
        int intFromLen = strFrom.length();
        int intPos;
        // 循环替换字符串
        while ((intPos = strSource.indexOf(strFrom)) != -1) {
            // 获取匹配字符串的左边子串
            strDest = strDest + strSource.substring(0, intPos);
            // 加上替换后的子串
            strDest = strDest + strTo;
            // 修改源串为匹配子串后的子串
            strSource = strSource.substring(intPos + intFromLen);
        }
        // 加上没有匹配的子串
        strDest = strDest + strSource;
        // 返回
        return strDest;
    }

    /**
     * @param [colname]
     * @return java.lang.String
     * @Function 处理列名, 把空格下划线'_'去掉,同时把下划线后的首字母大写 要是整个列在3个字符及以内,则去掉'_'后,不把"_"后首字母大写.
     * @author likaixuan
     * @Date 2018-09-08 16:02
     */
    public static String processColnames(String colname) {
        char[] ch = colname.toCharArray();
        char c = 'a';
        if (ch.length > 3) {
            for (int i = 0; i < ch.length; i++) {
                c = ch[i];
                if (c == '_' && (i + 1) < ch.length) {
                    if (ch[i + 1] >= 'a' && ch[i + 1] <= 'z') {
                        ch[i + 1] = (char) (ch[i + 1] - 32);
                    }
                }
            }
        }
        String str = new String(ch);
        return str.replaceAll("_", "");
    }


    /**
     * 将包路径转换为存放路径
     *
     * @return
     */
    public static String formatPackagePath(String packagePath) {
        // 拆分单词
        String[] strs = packagePath.split("\\.");
        // 合并单词
        StringBuffer stringBuffer = new StringBuffer();
        for (String string : strs) {
            stringBuffer.append("/" + string);
        }
        return stringBuffer.toString();
    }

    /**
     * 字段处理
     *
     * @param field     字段名称
     * @param delimiter 字段多个单词之间的分隔符
     * @return
     */
    public static String splitField(String field, String delimiter) {
        if (delimiter != null && delimiter != "") {
            // 拆分单词
            String[] fields = field.split(delimiter);
            // 首字母大写处理
            for (int i = 0; i < fields.length; i++) {
                fields[i] = titleCase(fields[i]);
            }
            // 合并单词
            StringBuffer stringBuffer = new StringBuffer();
            for (String string : fields) {
                stringBuffer.append(string);
            }
            // 返回
            return stringBuffer.toString();
        } else {
            return titleCase(field);
        }
    }

    /**
     * 表名称处理
     *
     * @param fileName  表名称
     * @param prefix    前缀;当不为空时进行处理，多种类型以逗号进行处理，并且只进行一次处理
     * @param delimiter 表名多个单词之间的分隔符
     * @return
     */
    public static String splitFileName(String fileName, String prefix, String delimiter) {
        if (prefix != null && prefix != "") {
            String[] prefixs = prefix.split(",");
            // 剔除可能存在的前缀
            String fileNameCopy = fileName;
            for (int i = 0; i < prefixs.length; i++) {
                fileName = fileName.replace(prefixs[i] + delimiter, "" + delimiter);
                // 当进行一次处理后，不再循环
                if (fileName != fileNameCopy) {
                    break;
                }
            }
        }
        if (delimiter != null && delimiter != "") {
            // 拆分单词
            String[] fileNames = fileName.split(delimiter);
            // 首字母大写处理
            for (int i = 0; i < fileNames.length; i++) {
                fileNames[i] = titleCase(fileNames[i]);
            }
            // 合并单词
            StringBuffer stringBuffer = new StringBuffer();
            for (String string : fileNames) {
                stringBuffer.append(string);
            }
            // 返回
            return stringBuffer.toString();
        } else {
            return titleCase(fileName);
        }
    }


    // 处理首字母大写
    public static String titleCase(String word) {

        word = word.toLowerCase();

        /*if (word != null && word != "" && word.length() != 0) {
            char[] strChar = word.toCharArray();
            strChar[0] -= 32;
            word = String.valueOf(strChar);
        }*/
        return toUpperCaseFirstOne(word);
    }

}
